<?php

namespace app\qingadmin\controller;

use think\facade\Db;
use think\facade\View;
use think\facade\Request;

class Fbi extends Base
{
    // APISpace IP查询接口配置
    private $apiSpaceToken = 'uz6a6frkyb4vi77yitcyh3600nfmiu6i'; // 请替换为你的实际token
    private $ipApiUrl = 'https://eolink.o.apispace.com/ipguishu/ip/geo/v1/district';
    
    public function index()
    {
        // 获取分页数据
        $list = Db::name('fbi')
            ->field('id, ip, useragent, device, adminwrite, create_time')
            ->group('ip, device') // 按ip+device组合去重
            ->order('create_time', 'asc')
            ->paginate(150);
        
        // 为每条记录添加IP归属地信息
        if (!empty($list)) {
            foreach ($list as &$item) {
                // 调用IP查询接口
                $ipInfo = $this->getIpLocation($item['ip']);
                // 格式化归属地信息
                $item['location'] = $this->formatLocation($ipInfo);
            }
            unset($item); // 释放引用
        }
        
        // 传递数据到模板
        View::assign('list', $list);
        View::assign('page', $list->render());
        
        // 渲染模板
        return View::fetch();
    }
    
    /**
     * 查询IP归属地 (使用APISpace接口)
     * @param string $ip IP地址
     * @return array|false 包含归属地信息的数组或false
     */
    private function getIpLocation($ip)
    {
        // 简单验证IP格式
        if (!filter_var($ip, FILTER_VALIDATE_IP)) {
            return false;
        }
        
        // 构建请求URL
        $url = $this->ipApiUrl . '?ip=' . $ip . '&coordsys=WGS84';
        
        $curl = curl_init();
        
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 5, // 超时时间设为5秒
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_POSTFIELDS => "",
            CURLOPT_HTTPHEADER => array(
                "X-APISpace-Token: " . $this->apiSpaceToken
            ),
        ));
        
        $response = curl_exec($curl);
        var_dump($response);
        $err = curl_error($curl);
        
        curl_close($curl);
        
        // 处理cURL错误
        if ($err) {
            return false;
        }
        
        // 解析JSON响应
        $result = json_decode($response, true);
        
        // 检查解析是否成功且返回正常
        if (json_last_error() !== JSON_ERROR_NONE || empty($result) || (!empty($result['status']) && $result['status'] != 0)) {
            return false;
        }
        
        return $result;
    }
    
    /**
     * 格式化IP归属地信息
     * @param array|false $ipInfo IP信息数组
     * @return string 格式化后的归属地字符串
     */
    private function formatLocation($ipInfo)
    {
        if (!$ipInfo || empty($ipInfo['data'])) {
            return "未知位置";
        }
        
        $data = $ipInfo['data'];
        
        // 提取需要的信息
        $country = $data['country'] ?? '';
        $region = $data['region'] ?? '';
        $city = $data['city'] ?? '';
        $isp = $data['isp'] ?? '';
        
        // 组合信息（过滤空值）
        $locationParts = array_filter([$country, $region, $city, $isp]);
        
        return implode(' ', $locationParts);
    }

    public function index1()
    {
        $allData = Db::name('fbi')->select();
        var_dump($allData);
        return view();
    }
}
    